
#ifndef SX_OPENGL_DEFAULT_PLOTAXES_RENDERER_H
#define SX_OPENGL_DEFAULT_PLOTAXES_RENDERER_H

#include <sxGraphicsObjectRenderer.h>
#include <sxPlotAxes_Representation.h>
#include <sxPlotAxes.h>
#include <sxOpenGL_Context.h>

/* Sx library types. */
using Sx::Graphics::Objects::PlotAxes;
using Sx::Graphics::Objects::Rendering::GraphicsObjectRenderer;
using Sx::Graphics::Representations::Objects::PlotAxes_Representation;
using Sx::Graphics::Color3f;
using Sx::Graphics::Color4f;
using Sx::OpenGL::Graphics::Contexts::OpenGL_Context;

namespace Sx {
namespace OpenGL {
namespace Graphics {
namespace Objects {
namespace Rendering {

class OpenGL_DefaultPlotAxesRenderer : public GraphicsObjectRenderer<OpenGL_Context, PlotAxes, PlotAxes_Representation> {
public:
	OpenGL_DefaultPlotAxesRenderer(const std::shared_ptr<OpenGL_Context>& graphicsContext);
	virtual ~OpenGL_DefaultPlotAxesRenderer();

	bool construct(OpenGL_Context* const graphicsContext, PlotAxes* const plot, PlotAxes_Representation* const physicalRepresentation);
	void update(OpenGL_Context* const graphicsContext, PlotAxes* const plot, float dt);
	void render(OpenGL_Context* const graphicsContext, PlotAxes* const plot, PlotAxes_Representation* const physicalRepresentation);
	
	void setMajorColor(const Color3f& color);
	void setMajorColor(const Color4f& color);
	void setMajorColor(float r, float g, float b);
	void setMajorColor(float r, float g, float b, float a);

	void setMinorColor(const Color3f& color);
	void setMinorColor(const Color4f& color);
	void setMinorColor(float r, float g, float b);
	void setMinorColor(float r, float g, float b, float a);

	Color4f getMajorColor() const;
	Color4f getMinorColor() const;
	
protected:
	Color4f majorColor, minorColor;
};

}

}

}

}

}

#endif
